package cn.yunwei.module.atl.token;

import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.util.HashMap;
import java.util.Map;

/**
 * @author wangbinggui
 */
public class TokenFetcher {
    /**
     * 获取 Token 的方法
     *
     * @return 返回获取到的 Token，如果失败则返回 null
     */
    public static String fetchToken() {
        String url = "http://36.250.157.133:8010/ipaas/SRM/api/srm/validToken";
        String deipaaskeyauth = "SqYhq96eev248CSKfuJ1fu0202dEQ21x";
        String grant_type = "client_credentials";
        String client_id = "supplier-atl-wx";
        String client_secret = "Wx2025@3461test";
        String scope = "default";

        // 构建带有查询参数的完整URL
        String fullUrl = UriComponentsBuilder.fromHttpUrl(url)
                .queryParam("deipaaskeyauth", deipaaskeyauth)
                .queryParam("grant_type", grant_type)
                .queryParam("client_id", client_id)
                .queryParam("client_secret", client_secret)
                .queryParam("scope", scope)
                .toUriString();

        // 调用 getToken 方法获取 Token
        return getToken(fullUrl);
    }

    /**
     * 发送请求获取 Token
     *
     * @param url 完整的 URL
     * @return 返回获取到的 Token，如果失败则返回 null
     */
    public static String getToken(String url) {
        // 创建 RestTemplate 实例
        RestTemplate restTemplate = new RestTemplate();

        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // 创建请求实体（空请求体）
        HttpEntity<String> requestEntity = new HttpEntity<>(headers);

        // 发送 POST 请求
        ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, Map.class);

        // 处理响应
        if (response.getStatusCode() == HttpStatus.OK) {
            // 从响应体中提取 access_token
            return (String) response.getBody().get("access_token");
        } else {
            // 请求失败，输出错误信息
            System.err.println("请求失败，状态码: " + response.getStatusCode());
        }
        return null;
    }
}
